/* 一个待办事项列表状态store */
// computed: 用于get方法. 派生状态. 比如订单金额 = 订单数量x单价. 订单金额就是computed
// 同样下面的 completedTodosCount 和 report 都是computed状态
// action: 用于set方法
import {extendObservable, computed, action,  useStrict} from 'mobx'

useStrict(true)

class TodoStore {
  constructor() {
    extendObservable(this, {
      // 存储待办列表的数组
      todos: [],
      // 返回已完成待办事项的数目(get方法)
      completedTodosCount: computed(() => {
        return this.todos.filter(
          todo => todo.completed === true
        ).length
      }),
      // 报告当前待办事项列表的情况
      report: computed(()=>{
        if (this.todos.length === 0) {
          return '<无待办事项>'
        } else {
          return `进度: ${this.completedTodosCount} / ${this.todos.length}`
        }
      }),
      // 添加一个待办事项(set方法)
      addTodo: action((task, assignee) => {
        this.todos.push({
          // 待办事项结构
          task: task,        // 任务内容
          completed: false,  // 是否完成
          assignee: assignee // 任务负责人
        })
      }),
      removeTodo: action(index=>{
        this.todos.splice(index, 1)
      }),
      setComplete: action((index) => {
        let prev = this.todos[index].completed
        this.todos[index].completed = !prev
      }),
      setTodoTask: action((index, value) => {
        this.todos[index].task = value
      })
    })
  }
}

const todoStore = new TodoStore()

export default todoStore
